package com.bsg.upm.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.bsg.upm.entity.ClusterEntity;

/**
 * 集群接口
 * 
 * @author HCK
 *
 */
public interface ClusterDao extends CrudDao<ClusterEntity> {

	/**
	 * 获取指定条件下的所有集群名称
	 * 
	 * @param areaId
	 *            区域编码
	 * @param enabled
	 *            可用
	 * @return 集群集合
	 */
	List<ClusterEntity> listName(@Param("areaId") String areaId, @Param("enabled") Boolean enabled);

	/**
	 * 获取指定区域、混合状态和可用状态的集群集合
	 * 
	 * @param areaId
	 *            区域编码
	 * @param mixed
	 *            是否为混合集群
	 * @param enabled
	 *            是否可用
	 * @return 集群集合
	 */
	List<ClusterEntity> listByAreaIdAndMixedAndEnabled(@Param("areaId") String areaId, @Param("mixed") Boolean mixed,
			@Param("enabled") Boolean enabled);

	/**
	 * 获取所有的集群信息(自身基础信息非关联其他信息)
	 * 
	 * @return 集群集合
	 */
	List<ClusterEntity> listWithoutAssociation();

	/**
	 * 获取指定区域下集群的数量
	 * 
	 * @param areaId
	 *            区域编码
	 * @return 集群数量
	 */
	int countByAreaId(String areaId);

	/**
	 * 获取指定集群名称和区域编码的集群数量
	 * 
	 * @param areaId
	 *            区域编码
	 * @param name
	 *            集群名称
	 * @return 集群数量
	 */
	int countByAreaIdAndName(@Param("areaId") String areaId, @Param("name") String name);

	/**
	 * 保存集群使用的网段信息
	 * 
	 * @param cluster
	 *            集群对象
	 * @return 保存条数
	 */
	int saveRelativeNetworking(ClusterEntity cluster);

	/**
	 * 更新集群关联编码
	 * 
	 * @param cluster
	 *            集群对象
	 * @return 更新数据条数
	 */
	int updateRelateId(ClusterEntity cluster);

	/**
	 * 更新集群可用状态
	 * 
	 * @param cluster
	 *            集群对象
	 * @return 更新数据条数
	 */
	int updateEnabled(ClusterEntity cluster);

	/**
	 * 删除集群使用的网段信息
	 * 
	 * @param clusterId
	 *            集群编码
	 * @return 删除条数
	 */
	int removeRelativeNetworking(String clusterId);

}
